#pragma once

#include "../core.h"
#include "event.h"


namespace Hazel{

    class HAZEL_API WindowResizeEvent : public Event
    {
    public:
        WindowResizeEvent(unsigned int width,unsigned int height)
            :m_width(width),m_height(height){}
        
        inline unsigned int GetWidth() const {return m_width;}
        inline unsigned int GetHeight() const {return m_height;}

        std::string ToString() const override
        {
            std::stringstream ss;
            ss<<"WindowResizeEvent: "<<m_width<<","<<m_height;
            return ss.str();
        }

        EVENT_CLASS_TYPE(WindowResize)
        EVENT_CLASS_CATEGORY(EventCateGory::EventCategoryApplication)
    private:
        unsigned int m_width,m_height;
    };

    class HAZEL_API WindowCloseEvent: public Event
    {
    public:
        WindowCloseEvent(){}

        EVENT_CLASS_TYPE(WindowClose)
        EVENT_CLASS_CATEGORY(EventCateGory::EventCategoryApplication)
    };

    class HAZEL_API AppTickEvent: public Event
    {
    public:
        AppTickEvent(){}

        EVENT_CLASS_TYPE(AppTick)
        EVENT_CLASS_CATEGORY(EventCateGory::EventCategoryApplication)
    };

    class HAZEL_API AppUpdateEvent: public Event
    {
    public:
        AppUpdateEvent(){}

        EVENT_CLASS_TYPE(AppUpdate)
        EVENT_CLASS_CATEGORY(EventCateGory::EventCategoryApplication)
    };

    class HAZEL_API AppRanderEvent: public Event
    {
    public:
        AppRanderEvent(){}

        EVENT_CLASS_TYPE(AppRander)
        EVENT_CLASS_CATEGORY(EventCateGory::EventCategoryApplication)
    };
}